<!DOCTYPE html>
<html lang="en">

<head>
  <meta charset="UTF-8">
  <meta http-equiv="X-UA-Compatible" content="IE=edge">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <title>Document</title>
</head>

<body>
  <script>
    // 同步任务，只能一个一个的执行；前面的任务没有完成，后面的只能等待

    console.log(111)

    // 一个任务，如果耗时非常长，后面的任务只能等待，产生阻塞效果
    function fn(n) {
      if (n <= 2) return 1
      return fn(n - 1) + fn(n - 2)
    }
    setTimeout(() => {
      console.log(fn(45))
    }, 0)

    console.log(333)


    // 为了避免代码的阻塞效果，出现了异步任务
    // - 同步任务，还是交给JS单线程去执行
    // - 异步任务，交给宿主环境管理（浏览器 | Node）
  </script>
</body>

</html>